package cap7;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;
class GUI_Cajero extends JFrame {
//Objetos del problema y objetos gráficos 
    private CarteraClientes cuentas;
    	private CtaCteBancaria cuentaActual;
        private Container contenedor;
        private JPanel panelSeleccion, panelInfo, panelCantidad;
        private JButton botonSeleccionar;
        private JButton[] botonera;
        private JLabel labelInfo;
        private JComboBox comboCuentas;
    public GUI_Cajero(CarteraClientes ctas) {      
    // Inicializa la colección de cuentas
            cuentas =ctas;
    //Obtiene el panel de contenido y crea los paneles
            contenedor = getContentPane(); 
            panelSeleccion = new JPanel();   
            panelInfo = new JPanel();    
            panelCantidad = new JPanel();   
    //Crea la etiqueta
            labelInfo = new JLabel("No ha seleccionado ninguna cuenta.");
            armarComboCuentas();
            armaBotones();
    //Establece los atributos del frame
            setSize(400, 250);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            armarGUI();
    }   
    private void armarGUI() {    
    // Establece el diagramado del panel de contenido
            contenedor.setLayout(new BoxLayout(contenedor, 
                                 BoxLayout.Y_AXIS));
    //Inserta los objetos gráficos a los paneles
            panelSeleccion.add(comboCuentas);
            panelSeleccion.add(botonSeleccionar);
            panelInfo.add(labelInfo);
            panelCantidad.setVisible(false);
    //Agrega los paneles al contenedor
            contenedor.add(panelSeleccion);
            contenedor.add(panelInfo);
            contenedor.add(panelCantidad);}
    private void armarComboCuentas(){
            String[] lista= new String[cuentas.cantElementos()];
            String n; CtaCteBancaria m;
            for (int i=0; i< cuentas.cantElementos(); i++){
                m = cuentas.obtenerCuenta(i);
                n = m.obtenerCodigo();
                lista[i] = ""+n; }
            comboCuentas = new JComboBox(lista);}
    private void armaBotones(){
    //Establece atributos del boton y lo vincula a su oyente
            botonSeleccionar = new JButton(); 
            botonSeleccionar.setText("Seleccionar cuenta");
            botonSeleccionar.addActionListener(new OyenteSeleccionar());
          //Crea la botonera y vincula todos los botones al oyente
            int cantBotones=5;
            botonera= new JButton[cantBotones];    
            for (int i=0; i<botonera.length;i++){
                botonera[i]= new JButton();
                botonera[i].addActionListener(new OyenteExtraccion());}
            botonera[0].setText("100");
            botonera[1].setText("200");
            botonera[2].setText("500");
            botonera[3].setText("750");
            botonera[4].setText("1000");
            for (int i=0; i<5;i++){
                panelCantidad.add(botonera[i]);}}
        private class OyenteSeleccionar implements ActionListener {
            public void actionPerformed(ActionEvent event){
                int nroCuenta= Integer.parseInt 
                    (comboCuentas.getSelectedItem().toString());
                cuentaActual=cuentas.recuperarCuenta(nroCuenta);
                if (cuentaActual!=null){
                    String mensaje= "Titular: " +  
                    cuentaActual.obtenerTitular() + " , Saldo="+ 
                    cuentaActual.obtenerSaldo();
                    labelInfo.setText(mensaje);
                    panelCantidad.setVisible(true);}
            }
        }
        private class OyenteExtraccion implements ActionListener {
            public void actionPerformed(ActionEvent event){
                JButton boton= (JButton) event.getSource();
                int extraccion= Integer.parseInt(boton.getText());
                JOptionPane dialogo = new JOptionPane();
                if (cuentaActual.obtenerSaldo()>=extraccion){     
                    cuentaActual.extraer(extraccion);
                    dialogo.showMessageDialog( null, 
                        "Usted extrajo " + extraccion+ 
                    " pesos \n Su saldo actual es "    
                 + cuentaActual.obtenerSaldo()," Extracción",         
                   JOptionPane.PLAIN_MESSAGE ); 
                    labelInfo.setText("Seleccione una cuenta ");
                    cuentaActual=null;
                    panelCantidad.setVisible(false);    }
                else 
                    dialogo.showMessageDialog( null, 
                        "Usted NO puede extraer esa cantidad",  
                    "Advertencia", JOptionPane.WARNING_MESSAGE ); }
        }
    }

